// 
// @Auther: by wujehy
// @Email:wujehy@qq.com
// @Data:2021/1/31.
// @Time:下午3:46.
// 
//


#include <base_types.h>
#include <iostream>
#include "Manager.h"
/// 引入需要注册的模块
#include "App/TestMsgRecv.h"
#include "App/TestMsgSend.h"
#include "App/TestUserLogin.h"

/**
 * @brief 生成一个数据包
 * @param modType
 * @param modSubType
 * @param code
 * @param msg
 * @param body
 * @return
 */
std::unique_ptr<DataPacket> genDatapacker(int modType , int modSubType , int code , const std::string &msg , const std::string &body)
{
    std::unique_ptr<DataPacket> packet = std::make_unique<DataPacket>();
    packet->type = modType;
    packet->subtype = modSubType ;
    packet->code = code;
    packet->errmsg = msg;
    packet->body = body;
    return packet;
}

// 测试生成　三种包
void TestManager(Manager &manger){
    manger.rount(genDatapacker(ModuleTypeEnum::Mod_Msg , MsgSubTypeEnum::Msg_Send ,200 ,"ok" , "Msg_Send test "));
    manger.rount(genDatapacker(ModuleTypeEnum::Mod_Msg , MsgSubTypeEnum::Msg_Recv ,200 ,"ok" , "Msg_Recv test "));
    manger.rount(genDatapacker(ModuleTypeEnum::Mod_Msg , MsgSubTypeEnum::Msg_Send ,404 ,"not found page" , "Msg_Send test2"));
    manger.rount(genDatapacker(ModuleTypeEnum::Mod_User , UserSubTypeEnum::User_Login ,200 ,"--" , "User_Login test2"));
}

int main()
{
    LOGDEBUF()<<" 测试开始 : "<<std::endl;

    Manager manager;
    // 注册模块　, 先注册一个模块
    LOGINFO() <<" 只注册一个TestMsgSend　的情况:" <<std::endl;
    manager.regiserMod(new TestMsgSend);
    // 测试一个模块的时候的情况
    TestManager(manager);
    LOGINFO() <<" 又注册一个TestMsgRecv　的情况:" <<std::endl;
    manager.regiserMod(new TestMsgRecv);

    TestManager(manager);
    LOGINFO() <<" 又注册一个 TestUserLogin　的情况:" <<std::endl;
    // 手动释放的情况
    TestUserLogin *myModUser = new TestUserLogin;
    //　false 的时候　模块由开者决定生命周期
    manager.regiserMod(myModUser , false);

    TestManager(manager);
    // 结束　需要释放myModUser　
    LOGDEBUF()<<"手动析构 TestUserLogin"<<std::endl;
    manager.removeModKey(myModUser);
    delete myModUser;
    LOGDEBUF()<<"自动析构任务开始"<<std::endl;
    return 0;
}